home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / biblio / bibtex / contrib / harvard.sty < prev    next >
Text File  |  1994-08-22  |  8KB  |  249 lines

  1. %% harvard.sty - harvard bibliography style Version 2.0.3
  2. %% Author: Peter Williams peterw@archsci.arch.su.edu.au
  3. %% Copyright: Peter Williams 1994
  4. \NeedsTeXFormat{LaTeX2e}
  5. \ProvidesPackage{harvard}
  6. \RequirePackage{ifthen}
  7. \IfFileExists{html.sty}{\RequirePackage{html}
  8. \newcommand{\harvardurl}[1]{\htmladdnormallink*{\textbf{URL:} \textit{##1}}{##1}}
  9. }{
  10. \newcommand{\harvardurl}[1]{\textbf{URL:} \textit{##1}}
  11. }
  12. \DeclareOption{full}{\citationmode{full}}
  13. \DeclareOption{abbr}{\citationmode{abbr}}
  14. \DeclareOption{default}{\citationmode{default}}
  15. \DeclareOption{agsmcite}{\citationstyle{agsm}}
  16. \DeclareOption{dcucite}{\citationstyle{dcu}}
  17. \DeclareOption{round}{\harvardparenthesis{round}\harvardyearparenthesis{round}}
  18. \DeclareOption{curly}{\harvardparenthesis{curly}\harvardyearparenthesis{curly}}
  19. \DeclareOption{angle}{\harvardparenthesis{angle}\harvardyearparenthesis{angle}}
  20. \DeclareOption{square}{\harvardparenthesis{square}\harvardyearparenthesis{square}}
  21. \DeclareOption{none}{\harvardparenthesis{none}\harvardyearparenthesis{none}}
  22. \DeclareOption*{
  23.   \global\edef\HAR@tmp{\CurrentOption}
  24.   \AtBeginDocument{\bibliographystyle{\HAR@tmp}}
  25. }
  26.  
  27. \newcommand{\harvarditem}[4][\null]{\item[]%
  28. \if@filesw{ \def\protect##1{\string ##1\space}%
  29. \ifthenelse{\equal{#1}{\null}}
  30.   {\immediate\write\@auxout{\string\harvardcite{#4}{#2}{#2}{#3}}}
  31.   {\immediate\write\@auxout{\string\harvardcite{#4}{#2}{#1}{#3}}}
  32. }\fi%
  33. \protect\hspace*{-\labelwidth}\protect\hspace*{-\labelsep}\ignorespaces%
  34. }
  35.  
  36. \newcommand{\harvardcite}[4]{
  37.   \global\@namedef{HAR@fn@#1}{#2}
  38.   \global\@namedef{HAR@an@#1}{#3}
  39.   \global\@namedef{HAR@yr@#1}{#4}
  40.   \global\@namedef{HAR@df@#1}{\csname HAR@fn@#1\endcsname}
  41. }
  42.  
  43. \newcommand{\citationmode}[1]{
  44.   \renewcommand{\HAR@citemode}{\csname HAR@cite@#1\endcsname}
  45. }
  46.  
  47. \newcommand{\HAR@cite@full}{HAR@fn@}
  48. \newcommand{\HAR@cite@abbr}{HAR@an@}
  49. \newcommand{\HAR@cite@default}{HAR@df@}
  50. \newcommand{\HAR@citemode}{\HAR@cite@default}
  51.  
  52. \newcommand{\HAR@citetoaux}[1]{%
  53.   \if@filesw\immediate\write\@auxout{\string\citation{#1}}\fi%
  54. }
  55.  
  56. \newcommand{\HAR@checkdef}[2]{\@ifundefined{HAR@df@#1}%
  57.   {\textbf{?}\@warning{Citation '#1' on page \thepage \space undefined}}%
  58.   {#2}%
  59. }
  60.  
  61. \newcommand{\HAR@dolist}[2]{\def\@citea{\null}\@for\@citeb:=#1\do%
  62. {\@citea\def\@citea{\HAR@hisep\penalty\@m\ }\HAR@checkdef{\@citeb}%
  63. {#2{\@citeb}\HAR@hysep\penalty\@m\ %
  64. \HAR@year{\@citeb}\HAR@setd{\@citeb}}}%
  65. }
  66.  
  67. \def\@enamedef#1{\expandafter\def\csname #1\expandafter\endcsname\expandafter}
  68. \newcommand{\HAR@name}[1]{\csname \HAR@citemode#1\endcsname}
  69. \newcommand{\HAR@fname}[1]{\csname HAR@fn@#1\endcsname}
  70. \newcommand{\HAR@aname}[1]{\csname HAR@an@#1\endcsname}
  71. \newcommand{\HAR@year}[1]{\csname HAR@yr@#1\endcsname}
  72. \newcommand{\HAR@setd}[1]{%
  73. \global\@enamedef{HAR@df@#1}{\csname HAR@an@#1\endcsname}%
  74. }
  75.  
  76. \newcommand{\HAR@ifvb}[2]{\@ifnextchar |{\def\@tempa|{#1}\@tempa}{#2}}
  77.  
  78. \renewcommand{\cite}{\@ifstar{\@ifstar{\HAR@acite}{\HAR@fcite}}{\HAR@dcite}}
  79.  
  80. \newcommand{\HAR@dcite}[2][\null]{\HAR@citetoaux{#2}%
  81. {\harvardleft\HAR@dolist{#2}{\HAR@name}\ifthenelse{\equal{#1}{\null}}%
  82.   {}{, #1}\harvardright}%
  83. }
  84.  
  85. \newcommand{\HAR@acite}[2][\null]{\HAR@citetoaux{#2}%
  86. {\harvardleft\HAR@dolist{#2}{\HAR@aname}\ifthenelse{\equal{#1}{\null}}%
  87.   {}{, #1}\harvardright}%
  88. }
  89.  
  90. \newcommand{\HAR@fcite}[2][\null]{\HAR@citetoaux{#2}%
  91. {\harvardleft\HAR@dolist{#2}{\HAR@fname}\ifthenelse{\equal{#1}{\null}}%
  92.   {}{, #1}\harvardright}%
  93. }
  94.  
  95. \newcommand{\citeaffixed}{\@ifstar{\@ifstar{\HAR@aciteaff}{\HAR@fciteaff}}%
  96. {\HAR@dciteaff}%
  97. }
  98.  
  99. \newcommand{\HAR@fciteaff}[3][\null]{\HAR@citetoaux{#2}%
  100. {\harvardleft#3\ \HAR@dolist{#2}{\HAR@fname}\ifthenelse{\equal{#1}{\null}}%
  101.     {}{, #1}\harvardright}%
  102. }
  103.  
  104. \newcommand{\HAR@aciteaff}[3][\null]{\HAR@citetoaux{#2}%
  105. {\harvardleft#3\ \HAR@dolist{#2}{\HAR@aname}\ifthenelse{\equal{#1}{\null}}%
  106.     {}{, #1}\harvardright}%
  107. }
  108.  
  109. \newcommand{\HAR@dciteaff}[3][\null]{\HAR@citetoaux{#2}%
  110. {\harvardleft#3\ \HAR@dolist{#2}{\HAR@name}\ifthenelse{\equal{#1}{\null}}%
  111.     {}{, #1}\harvardright}%
  112. }
  113.  
  114. \newcommand{\citeasnoun}{\@ifstar{\@ifstar{\HAR@aciteasn}{\HAR@fciteasn}}%
  115. {\HAR@dciteasn}%
  116. }
  117.  
  118. \newcommand{\HAR@fciteasn}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{%
  119. {\HAR@fname{#2}\ \harvardyearleft\HAR@year{#2}\ifthenelse{\equal{#1}{\null}}
  120.     {}{, #1}\harvardyearright}\HAR@setd{#2}}%
  121. }
  122.  
  123. \newcommand{\HAR@aciteasn}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{%
  124. {\HAR@aname{#2}\ \harvardyearleft\HAR@year{#2}\ifthenelse{\equal{#1}{\null}}
  125.     {}{, #1}\harvardyearright}\HAR@setd{#2}}%
  126. }
  127.  
  128. \newcommand{\HAR@dciteasn}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{%
  129. {\HAR@name{#2}\ \harvardyearleft\HAR@year{#2}\ifthenelse{\equal{#1}{\null}}
  130.     {}{, #1}\harvardyearright}\HAR@setd{#2}}%
  131. }
  132.  
  133. \newcommand{\possessivecite}{\@ifstar{\@ifstar{\HAR@acitepos}{\HAR@fcitepos}}%
  134. {\HAR@dcitepos}%
  135. }
  136.  
  137. \newcommand{\HAR@fcitepos}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{%
  138. {\HAR@fname{#2}'s \harvardyearleft\HAR@year{#2}\ifthenelse{\equal{#1}{\null}}
  139.     {}{, #1}\harvardyearright}\HAR@setd{#2}}%
  140. }
  141.  
  142. \newcommand{\HAR@acitepos}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{%
  143. {\HAR@aname{#2}'s \harvardyearleft\HAR@year{#2}\ifthenelse{\equal{#1}{\null}}
  144.     {}{, #1}\harvardyearright}\HAR@setd{#2}}%
  145. }
  146.  
  147. \newcommand{\HAR@dcitepos}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{%
  148. {\HAR@name{#2}'s \harvardyearleft\HAR@year{#2}\ifthenelse{\equal{#1}{\null}}
  149.     {}{, #1}\harvardyearright}\HAR@setd{#2}}%
  150. }
  151.  
  152. \newcommand{\citename}{\@ifstar{\@ifstar{\HAR@acitenam}\HAR@fcitenam}%
  153. {\HAR@dcitenam}%
  154. }
  155.  
  156. \newcommand{\HAR@fcitenam}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{%
  157. {\HAR@fname{#2}\ifthenelse{\equal{#1}{\null}}
  158.     {}{\ \harvardleft#1\harvardright}}}%
  159. }
  160.  
  161. \newcommand{\HAR@acitenam}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{%
  162. {\HAR@aname{#2}\ifthenelse{\equal{#1}{\null}}
  163.     {}{\ \harvardleft#1\harvardright}}}%
  164. }
  165.  
  166. \newcommand{\HAR@dcitenam}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{%
  167. {\HAR@name{#2}\ifthenelse{\equal{#1}{\null}}
  168.     {}{\ \harvardleft#1\harvardright}}}%
  169. }
  170.  
  171. \newcommand{\citeyear}{\@ifstar{\HAR@citeyrnb}{\HAR@citeyr}}
  172.  
  173. \newcommand{\HAR@citeyrnb}[2][\null]{\HAR@citetoaux{#2}
  174. {\def\@citea{\null}\@for\@citeb:=#2\do%
  175. {\@citea\def\@citea{\HAR@hisep\penalty\@m\ }\HAR@checkdef{\@citeb}%
  176. {\HAR@year{\@citeb}}}\ifthenelse{\equal{#1}{\null}}%
  177. {}{, #1}}%
  178. }
  179.  
  180. \newcommand{\HAR@citeyr}[2][\null]{\HAR@citetoaux{#2}
  181. {\harvardleft\def\@citea{\null}\@for\@citeb:=#2\do%
  182. {\@citea\def\@citea{\HAR@hisep\penalty\@m\ }\HAR@checkdef{\@citeb}%
  183. {\HAR@year{\@citeb}}}\ifthenelse{\equal{#1}{\null}}%
  184. {}{, #1}\harvardright}%
  185. }
  186.  
  187. \newcommand{\HAR@hysep@agsm}{\null}
  188. \newcommand{\HAR@hisep@agsm}{,}
  189. \newcommand{\HAR@hysep@dcu}{,}
  190. \newcommand{\HAR@hisep@dcu}{;}
  191. \newcommand{\HAR@and@agsm}{\&}
  192. \newcommand{\HAR@and@dcu}{and}
  193. \newcommand{\HAR@hysep}{\HAR@hysep@agsm}
  194. \newcommand{\HAR@hisep}{\HAR@hisep@agsm}
  195. \newcommand{\harvardand}{\HAR@and@agsm}
  196. \newcommand{\citationstyle}[1]{%
  197.   \renewcommand{\HAR@hysep}{\csname HAR@hysep@#1\endcsname}
  198.   \renewcommand{\HAR@hisep}{\csname HAR@hisep@#1\endcsname}
  199.   \renewcommand{\harvardand}{\csname HAR@and@#1\endcsname}
  200. }
  201.  
  202. \newcommand{\HAR@bl@round}{(}
  203. \newcommand{\HAR@br@round}{)}
  204. \newcommand{\HAR@bl@square}{[}
  205. \newcommand{\HAR@br@square}{]}
  206. \newcommand{\HAR@bl@curly}{\{}
  207. \newcommand{\HAR@br@curly}{\}}
  208. \newcommand{\HAR@bl@angle}{$<$}
  209. \newcommand{\HAR@br@angle}{$>$}
  210. \newcommand{\HAR@bl@none}{}
  211. \newcommand{\HAR@br@none}{}
  212. \newcommand{\harvardleft}{\HAR@bl@round}
  213. \newcommand{\harvardright}{\HAR@br@round}
  214. \newcommand{\harvardparenthesis}[1]{
  215.   \renewcommand{\harvardleft}{\csname HAR@bl@#1\endcsname}
  216.   \renewcommand{\harvardright}{\csname HAR@br@#1\endcsname}
  217.   \harvardyearparenthesis{#1}
  218. }
  219.  
  220. \newcommand{\harvardyearleft}{\HAR@bl@round}
  221. \newcommand{\harvardyearright}{\HAR@br@round}
  222. \newcommand{\harvardyearparenthesis}[1]{
  223.   \renewcommand{\harvardyearleft}{\csname HAR@bl@#1\endcsname}
  224.   \renewcommand{\harvardyearright}{\csname HAR@br@#1\endcsname}
  225. }
  226.  
  227. \newcommand{\HAR@checkcitations}[4]{
  228.   \def\HAR@tempa{#2}\expandafter
  229.   \ifx \csname HAR@fn@#1\endcsname \HAR@tempa
  230.     \def\HAR@tempa{#3}\expandafter
  231.     \ifx \csname HAR@an@#1\endcsname \HAR@tempa
  232.       \def\HAR@tempa{#4}\expandafter
  233.       \ifx \csname HAR@yr@#1\endcsname \HAR@tempa
  234.       \else
  235.         \@tempswatrue
  236.       \fi
  237.     \else
  238.       \@tempswatrue
  239.     \fi
  240.   \else
  241.     \@tempswatrue
  242.   \fi
  243. }
  244.  
  245. \AtEndDocument{\renewcommand{\harvardcite}{\HAR@checkcitations}}
  246.  
  247. \ExecuteOptions{agsm,agsmcite,default,round}
  248. \ProcessOptions*
  249.